#include <iostream>
#include <memory>
#include <vector>
using namespace std;
#include "UdpServer.hpp"
#include "log.hpp"


//"120.78.124.565" 点分式十进制字符串风格的IP地址

// std::string Handler(const std::string& info, const std::string & clientip, uint16_t clientport)
// {
//     cout << "[" << clientip << ":" << clientport << "]" << "#" << info << endl;
//     std::string res = "Server get a message: ";
//     res += info;
//     cout << "res: " << res << endl;
//     return res; 
// }
// std::string Handler(const std::string& str)
// {
//     pid_t id = fork();
//     if(id == 0)
//     {
//         //....ls -a -l
//     }
    
// }

// bool SafeCheck(const std::string& cmd)
// {
//     int safe = false;
//     vector<string> key_word = {
//         "rm"
//         ,"mv"
//         ,"cp"
//         ,"kill"
//         ,"sudo"
//         ,"unlink"
//         ,"uninstall"
//         ,"yum"
//         ,"top"
//         ,"while"
//     };

//     for(auto &word : key_word)
//     {
//         auto pos = cmd.find(word);
//         if (pos != std::string::npos)
//         {
//             return false;
//         }
//     }
//     return true;
// }

// std::string ExcuteCommand(const std::string& cmd)
// {
//     cout << "get a request cmd: " << cmd << endl;
//     if(!SafeCheck(cmd))
//     {
//         return "Bad man";
//     }
//     FILE* fp = popen(cmd.c_str(), "r");
//     if(nullptr == fp)
//     {
//         perror("popen");
//         return "error";
//     }
//     char buffer[4096];
//     std::string result;
//     while(true)
//     {
//         char* res = fgets(buffer, sizeof(buffer), fp);
//         if(res == nullptr) break;
//         result += buffer;
//     }
//     pclose(fp);
//     return result;
// }


void Usage(std::string proc)
{
    cout << "\n\rUsage:" << proc << " prot[1024+]\n" << endl;
}

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        exit(0);
    }
    uint16_t port = stoi(argv[1]);

    unique_ptr<UdpServer> svr(new UdpServer(port));
    svr->Init();
    svr->Run();
    return 0;
}

